home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
vgacodng
/
part07_c.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-12-15
|
2KB
|
81 lines
program ShadeBob2;
uses crt;
var Pal : array[0..767] of byte;
x1,y1,x2,y2 : word; { X- und Y-Koords der beiden Bobs }
incx1,incy1,incx2,incy2 : shortint; { Inkrementationsparameter }
procedure SetPalette;assembler; { Setzt die Palette in Pal }
asm
mov dx,3C8h
xor al,al
out dx,al
mov cx,768
mov dx,3C9h
mov si,offset pal
@Jmp1:
lodsb
out dx,al
loop @Jmp1
end;
procedure RainbowPal; { Erstellt eine bunte Palette }
var loop : integer;
begin
for loop := 0 to 31 do begin
pal[loop*3] := loop * 2;
pal[(63-loop)*3] := loop * 2;
pal[(loop+64)*3+1] := loop * 2;
pal[(127-loop)*3+1] := loop * 2;
pal[(loop+128)*3+2] := loop * 2;
pal[(191-loop)*3+2] := loop * 2;
pal[(loop+192)*3] := loop * 2;
pal[(loop+192)*3+1] := loop * 2;
pal[(loop+192)*3+2] := loop * 2;
pal[(255-loop)*3] := loop * 2;
pal[(255-loop)*3+1] := loop * 2;
pal[(255-loop)*3+2] := loop * 2;
end;
setpalette;
end;
procedure SetBob(x,y:word); { Setzt ein Bob an die Koords X,Y }
var n1,n2 : byte;
begin
for n1 := 0 to 19 do { Hier werden in einem 20x20 Pixel großen Quadrat }
for n2 := 0 to 19 do { alle Pixelwerte um 1 erhöht }
mem[$A000:(n2+y)*320+n1+x] := mem[$A000:(n2+y)*320+n1+x] + 1;
end;
begin
asm mov ax,13h; int 10h end;
RainbowPal;
randomize;
x1 := random(280); { Zufällige X- und Y- Positionen für }
y1 := random(160); { beide Bobs }
x2 := random(280);
y2 := random(160);
incx1 := 1; { Bob 1 wird nach rechts und nach unten }
incy1 := 1; { bewegt }
incx2 := -1; { Bob 2 wird nach links und nach unten }
incy2 := 1; { bewegt }
repeat
inc(x1,incx1); { Bob-Positionen verändern }
inc(y1,incy1);
inc(x2,incx2);
inc(y2,incy2);
if (x1 = 299) or (x1 = 0) then incx1 := -incx1; { Überprüfen, ob einer }
if (y1 = 179) or (y1 = 0) then incy1 := -incy1; { der Bobs am Rand des }
if (x2 = 299) or (x2 = 0) then incx2 := -incx2; { Screens ist, und wenn }
if (y2 = 179) or (y2 = 0) then incy2 := -incy2; { ja dann Wert umkehren }
SetBob(x1,y1); { Die beiden Bobs zeichnen }
SetBob(x2,y2);
until keypressed;
readkey;
asm mov ax,3; int 10h end;
end.